package filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

// 1. implements Filter
// 2. no-arg 생성자
// 3. public class로 작성
// 4. life cycle 메소드 오버라이딩

public class TestFilter implements Filter{
	//인터페이스에서 임플먼츠 하기때문에 필요 없든 있든 다 오버라이딩 해야 한다.
//	간단하게 오버라이딩 하는 방법은 source에서 override클릭하면 자동완성 된다.
	public TestFilter() {
		// 테스트를 위한 no-arg 생성자 하나 만들어서
		System.out.println("TestFilter생성자 실행");
	}
	@Override	
	public void destroy() {
		// servlet에서 destroy 역할
		System.out.println("testFilter.destroy()실행");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// servlet에서 service() 역할, 핵심은 이녀석, 매개변수를 잘봐라
		//3번째 매개변수인 FilterChain은 다음에 호출될 Component 정보다. 
		
		//doFilter를 기준으로 전처리 작업은 여기에
		System.out.println("TestFilter chain.doFilter() 호출 전");
		chain.doFilter(request, response);//다음에 호출될 conponent를 호출하는 메소드

		//doFilter를 기준으로 후처리 작업은 여기에 
		System.out.println("TestFilter chain.doFilter() 호출 후 ");
		
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		// Servlet - init() 메소드, FilteConfig : servletConfig 의 역할
		// 초기 파라미터 조회 역할을 함
		System.out.println("testFilter.init()");
	}
	
}
